//默认导出
/**
 * method是表示请求是get 或者post
 * url是发请求的URL地址
 * params 是要传入的参数，默认是对象
 * async 是是否异步 ，默认是异步
 * */
export default (method, url, params = {}, async = true) => new Promise((resolve, reject) => {
    //1.创建一个xhr对象
    const xhr = new XMLHttpRequest();
    //2.绑定状态改变事件
    xhr.onreadystatechange = function () {
        // 2.1做判断,状态从0-4
        if (xhr.readyState == 4) {
            //2.2服务器状态码是不是200
            if (xhr.status == 200) {
                // 返回服务器保存的数据
                resolve(JSON.parse(xhr.responseText))
            }
            else {
                if (xhr.status == 401) {
                    // alert(123)
                    alert('您未登录或登录失效\n请重新登录')
                    location.assign('/manage/login.html')//转到登录页面
                } else {
                    reject("服务器出错啦！");
                }

            }
        }
    }
    //判断请求类型是否是get，如果是get需要把params数据放入URL中
    if (method.toUpperCase() == "GET") {
        url += "?";
        //循环遍历每个对象
        for (let [key, value] of Object.entries(params)) {
            url += key + "=" + encodeURIComponent(value) + '&';
        }
        url = url.slice(0, -1)//截取到倒数第二个
        //开放通道
        xhr.open(method, url, async)
        //从本地存储取
        xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));

    } else {//否则就是post
        xhr.open(method, url, async)
        //接收数据转为json形式
        xhr.setRequestHeader('Content-type', 'application/json');
        //post形式数据存在请求体中，请求体只能接收字符串和二进制，所以转为二进制
        xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
        xhr.send(JSON.stringify(params))

    }
})